package schema

import "gorm.io/plugin/soft_delete"

type User struct {
	Id                 int64                  `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT;comment:主键 - 自增" json:"id"`
	UserId             int64                  `gorm:"column:user_id;type:bigint(20)" json:"user_id"`
	Account            string                 `gorm:"column:account;type:varchar(100);comment:用户账号;NOT NULL" json:"account"`
	Phone              string                 `gorm:"column:phone;type:char(15);NOT NULL" json:"phone"`
	PhoneCode          string                 `gorm:"column:phone_code;type:char(10);comment:手机区号" json:"phone_code"`
	Email              string                 `gorm:"column:email;type:varchar(100);NOT NULL" json:"email"`
	Password           string                 `gorm:"column:password;type:varchar(255);comment:用户密码;NOT NULL" json:"password"`
	IsGoogle           int32                  `gorm:"column:is_google;type:tinyint(1);default:0;comment:谷歌验证登录开启状态：0.关闭 1.开启;NOT NULL" json:"is_google"`
	IsBindingGoogle    int32                  `gorm:"column:is_binding_google;type:tinyint(1);default:0;comment:是否绑定谷歌二维码：0.未绑定 1.绑定;NOT NULL" json:"is_binding_google"`
	GoogleCode         string                 `gorm:"column:google_code;type:varchar(50);comment:谷歌登录二维码" json:"google_code"`
	Nickname           string                 `gorm:"column:nickname;type:varchar(100);comment:用户昵称;NOT NULL" json:"nickname"`
	Sex                int                    `gorm:"column:sex;type:tinyint(1);default:0;comment:用户性别：0-未知，1-男，2-女;NOT NULL" json:"sex"`
	AvatarUrl          string                 `gorm:"column:avatar_url;type:varchar(255);comment:用户头像;NOT NULL" json:"avatar_url"`
	InviteCode         string                 `gorm:"column:invite_code;type:varchar(32);comment:邀请码;NOT NULL" json:"invite_code"`
	RegisterInviteCode string                 `gorm:"column:register_invite_code;type:varchar(32);comment:注册邀请码" json:"register_invite_code"`
	ChannelCode        string                 `gorm:"column:channel_code;type:varchar(32);comment:渠道号;NOT NULL" json:"channel_code"`
	RegisterIp         string                 `gorm:"column:register_ip;type:varchar(20);comment:注册IP;NOT NULL" json:"register_ip"`
	RegisterDevice     string                 `gorm:"column:register_device;type:varchar(16);comment:注册设备;NOT NULL" json:"register_device"`
	RegisterTime       int64                  `gorm:"column:register_time;type:bigint(20);default:0;comment:注册时间" json:"register_time"`
	FirstLoginTime     int64                  `gorm:"column:first_login_time;type:bigint(20);default:0;comment:首次登陆时间" json:"first_login_time"`
	LastOnlineTime     int64                  `gorm:"column:last_online_time;type:bigint(20);default:0;comment:最后在线时间" json:"last_online_time"`
	GroupId            int64                  `gorm:"column:group_id;type:bigint(20);default:0;comment:分组ID, -1-黑名单，0-默认;NOT NULL" json:"group_id"`
	IsBlacklist        int                    `gorm:"column:is_blacklist;type:tinyint(1);default:0;comment:是否为黑名单：0-不是，1-是;NOT NULL" json:"is_blacklist"`
	IsOnline           int                    `gorm:"column:is_online;type:tinyint(1);default:0;comment:在线状态: 0-离线，1-在线;NOT NULL" json:"is_online"`
	Status             int                    `gorm:"column:status;type:tinyint(1);default:0;comment:账户状态：0-启用，1-禁用;NOT NULL" json:"status"`
	AgentLevel         int                    `gorm:"column:agent_level;type:tinyint(1);default:0;comment:代理状态 0-未开通 1-外部代理 2-内部代理;NOT NULL" json:"agent_level"`
	VipLevel           int                    `gorm:"column:vip_level;type:tinyint(4);default:0;comment:VIP等级;NOT NULL" json:"vip_level"`
	Remark             string                 `gorm:"column:remark;type:varchar(255);comment:备注;NOT NULL" json:"remark"`
	CreatedAt          int64                  `gorm:"column:created_at;type:bigint(20);default:0;comment:创建时间;NOT NULL" json:"created_at"`
	UpdatedAt          int64                  `gorm:"column:updated_at;type:bigint(20);default:0;comment:更新时间;NOT NULL" json:"updated_at"`
	DeletedAt          *soft_delete.DeletedAt `gorm:"softDelete:deleted_at;column:deleted_at;type:bigint(20);NULL;default:null" json:"deletedAt"`
}

func (u User) TableName() string {
	return "users"
}
